// mescroll-body 和 mescroll-uni 通用

// import MescrollUni from "./mescroll-uni.vue";
// import MescrollBody from "./mescroll-body.vue";

const MescrollMixin = {
	// components: { // 非H5端无法通过mixin注册组件, 只能在main.js中注册全局组件或具体界面中注册
	// 	MescrollUni,
	// 	MescrollBody
	// },
	data() {
		return {
			mescroll: null, //mescroll实例对象
			lastScrollTime: 0, // 上一次滚动的时间戳  
			scrollTimeout: null, // 滚动检测的定时器  
		}
	},
	// 注册系统自带的下拉刷新 (配置down.native为true时生效, 还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例)
	onPullDownRefresh(){
		this.mescroll && this.mescroll.onPullDownRefresh();
	},
	// 注册列表滚动事件,用于判定在顶部可下拉刷新,在指定位置可显示隐藏回到顶部按钮 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
	onPageScroll(e) {
		 // 关闭阻尼效果
		// console.log('==== onPageScroll========')
		// console.log(e.scrollTop);
		// let ispullup = e.scrollTop > this.lastScrollTopDistance ? 1 : 0;
		// this.lastScrollTopDistance = e.scrollTop;
		// if(ispullup == 1){
		// 	 // console.log('=-----------===上拉========');
		// 	// if(e.scrollTop >1 && e.scrollTop <150){
		// 	if(e.scrollTop >20 && e.scrollTop <200){
		// 		//滚动到指定位置
		// 		this.scrollToMyPosition(ispullup);
		// 	}
		// }else{
		// 	if(e.scrollTop <200){
		// 		this.scrollToMyPosition(ispullup);
		// 	}
		// }
		//展示联系客服
		if(e.scrollTop > 500){
			this.showContact = true
		}else{
			this.showContact = false
		}
		
		// 清除上一次的定时器，因为用户可能又开始了新的滚动  
		  // clearTimeout(this.scrollTimeout);  
		  // // 记录当前滚动的时间戳  
		  // this.lastScrollTime = Date.now();  
	  
		  // 设置一个定时器来检测滚动是否停止 
		
		 //  this.scrollTimeout = setTimeout(() => {  
			// // 假设50毫秒内没有新的滚动事件，则认为滚动已停止  
			// if (Date.now() - this.lastScrollTime > 50) {  
			//   this.onScrollEnd(e.scrollTop);  
			//   console.log('--e.scrollTop--');
			//   console.log(e.scrollTop);
			// }  
		 //  }, 50);  
		this.mescroll && this.mescroll.onPageScroll(e);
	},
	// 注册滚动到底部的事件,用于上拉加载 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
	onReachBottom() {
		this.mescroll && this.mescroll.onReachBottom();
	},
	methods: {
		onScrollEnd(lastdistance) {  
			this.lastScrollTopDistance = lastdistance;
			console.log('滚动已停止');  
			clearTimeout(this.scrollTimeout);  
			clearTimeout(this.scrollTimeout2);  
		}, 
		scrollToMyPosition(ispullup) {
			if(ispullup == 1){
				this.indexFirstScroll = 1;
				uni.pageScrollTo({
					scrollTop: 280, // 滚动到280px的位置  
					duration: 100 // 滚动动画的持续时间，单位ms  
				});  
			}else{
				uni.pageScrollTo({
					scrollTop: 0, // 滚动到200px的位置  
					duration: 100 // 滚动动画的持续时间，单位ms  
				});  
			}
		},
		
		// mescroll组件初始化的回调,可获取到mescroll对象
		mescrollInit(mescroll) {
			// console.log('==== mescrollInit=======')
			this.mescroll = mescroll;
			this.mescrollInitByRef(); // 兼容字节跳动小程序
		},
		// 以ref的方式初始化mescroll对象 (兼容字节跳动小程序)
		mescrollInitByRef() {
			if(!this.mescroll || !this.mescroll.resetUpScroll){
				let mescrollRef = this.$refs.mescrollRef;
				if(mescrollRef) this.mescroll = mescrollRef.mescroll
			}
		},
		// 下拉刷新的回调 (mixin默认resetUpScroll)
		downCallback() {
			console.log('====监听下拉刷新事件====');
			if(this.mescroll.optUp.use){
				this.mescroll.resetUpScroll()
			}else{
				this.scrollTimeout2 =setTimeout(()=>{
					this.mescroll.endSuccess();
				}, 500)
			}
			
			
		},
		// 上拉加载的回调
		upCallback() {
			console.log('====监听上拉事件====');
			// mixin默认延时500自动结束加载
			setTimeout(()=>{
				this.mescroll.endErr();
			}, 500)
			
		}
	},
	mounted() {
		this.mescrollInitByRef(); // 兼容字节跳动小程序, 避免未设置@init或@init此时未能取到ref的情况
	}
	
}

export default MescrollMixin;
